home *** CD-ROM | disk | FTP | other *** search
- /*
- HighLevelUDP.c
-
- high-level UDP I/O functions
-
- 12/04/95 dn - Created.
- */
-
- #include <HighLevelUDP.h>
-
- #include <SegLoad.h>
- #include <OSUtils.h>
-
- #if defined(SYMANTEC_C)||defined(THINK_C)
- #define inline
- #endif
-
- #if defined(SYMANTEC_C)||defined(THINK_C)
- #else
- #pragma mark -
- #pragma mark •• High-level UDP Functions ••
- #endif
- OSErr udpCreate(StreamPtr *stream,ProcPtr udpNotifyProc,Ptr buffer, long bufsize){
- OSErr err=noErr;
- UDPiopb udp;
- UDPNotifyUPP notify;
-
- if (buffer == NULL){
- if (bufsize == 0)
- bufsize = 16*1024;
-
- buffer=NewPtr(bufsize);
- }
-
- notify=NewUDPNotifyProc(udpNotifyProc);
-
- udp.csParam.create.rcvBuff=buffer;
- udp.csParam.create.rcvBuffLen=bufsize;
- udp.csParam.create.notifyProc=notify;
- udp.csParam.create.endingPort=0;
-
- err=UDP_Create(&udp,false);// create the stream...
-
- *stream = err ? 0 : udp.udpStream;
-
- return err;
- }
-
- OSErr udpSend(ip_addr host,udp_port port,StreamPtr stream,Ptr data,unsigned short len,Boolean push,Boolean urgent){
- UDPiopb udp;
- wdsEntry en[2];
-
- en[0].length=len;
- en[0].ptr=data;
-
- en[1].length=0;
- en[1].ptr=0;
-
- udp.udpStream=stream;
-
- udp.csParam.send.remoteHost=host;
- udp.csParam.send.remotePort=port;
- udp.csParam.send.reserved=0; // docs say this must be set to zero
- udp.csParam.send.filler=0;
-
- udp.csParam.send.wdsPtr=(char*)en;
-
- return UDP_Write(&udp,false); // send data synchronously...
- }
-
- OSErr udpRead(ip_addr host,udp_port port,StreamPtr stream,Ptr data,unsigned short *len){
- OSErr err=noErr;
- UDPiopb udp;
-
- udp.udpStream=stream;
-
- udp.csParam.receive.remoteHost=host;
- udp.csParam.receive.remotePort=port;
- udp.csParam.receive.timeOut=0;
- udp.csParam.receive.rcvBuff = (char*) data;
- udp.csParam.receive.rcvBuffLen = *len;
-
- err=UDP_Read(&udp,false);// Do a synchronous read...
-
- *len = udp.csParam.receive.rcvBuffLen;
-
- return err;
- }
-
- OSErr udpReturnBuffers(StreamPtr stream,rdsEntry *rds){
- UDPiopb udp;
-
- udp.udpStream=stream;
-
- udp.csParam.receive.rcvBuff=(char*)rds;
-
- return UDP_BfrReturn(&udp,false);
- }
-
- OSErr udpRelease(StreamPtr stream,Ptr *buffer, long *bufsize){
- UDPiopb udp;
- OSErr err;
-
- udp.udpStream=stream;
-
- err=UDP_Release(&udp,false);
-
- if (buffer != NULL)
- *buffer = udp.csParam.create.rcvBuff;
- else
- DisposePtr(udp.csParam.create.rcvBuff);
-
- if (bufsize != NULL)
- *bufsize = udp.csParam.create.rcvBuffLen;
-
- return err;
- }
-
-
-
-